/**
 * 练习3.两数交换
*/

#include <iostream>
void swap_1(int *, int *);
void swap_2(int &, int &);

int main(void)
{
  int a = 3;
  int b = 4;
  // swap_1(&a, &b);
  swap_2(a, b);
  std::cout << "--------------交换后------------"
            << "\n"
            << "a : " << a << "\n"
            << "b : " << b << std::endl;

  printf("----------end-----------\n");
  return 0;
}

// 中间变量

void swap_1(int *a, int *b)
{
  *a = *a + *b;
  *b = *a - *b;
  *a = *a - *b;
}

void swap_2(int &a, int &b)
{
  // 一个数异或自己为0
  // 任意一个数异或0还是自身
  a = a ^ b;
  b = a ^ b;
  a = a ^ b;
}